import java.util.*;

/**
 * 
 */

/**
 * @author Claudio
 * @author Cassio Felipe
 *
 */
public class Jogador implements IJogador{

	private String nome;
	
	private int idade;
	
	private List<Carta> mao;
	
	private boolean uno;
	
	public Jogador() {
		mao = new ArrayList<Carta>();
	}
	
//	@Override
//	public Carta jogarCarta(int possicaoCarta) {
//		
//		if(!mao.isEmpty())
//		return mao.remove(possicaoCarta);
//		else
//		return null;
//	}

//	@Override
//	public boolean puxarCarta(Stack<Carta> deck,
//			int numeroDeCartas) {
//		boolean Puxou = false;
//		
//		while(numeroDeCartas != 0 && !deck.isEmpty()){
//			this.mao.add(deck.pop());
//			numeroDeCartas--;//Se o tipo numeroDeCartas fosse "Integer" poderia fazer o incremento
//			Puxou = true;
//		}
//		return Puxou;
//		
//	}

//	@Override
//	public boolean declararUno(List<ICarta> mao) {
//		
//		boolean UNO = false;
//		
//		if(mao.size() == 1){
//			UNO = true;
//		}
//		
//		setUno(UNO);
//		// TODO Auto-generated method stub
//		return UNO;
//		
//	}

//	@Override
//	public int passarTurno(int idJogadorAtual) {
//	
//		return idJogadorAtual+1;
//		
//		/*
//		 * Se adicionarem o sentido do jogo na interface:
//		 * 
//		 * if(Sentido == Sentido.HORARIO)
//		 * 	if(idJogadorAtual+1 < numeroDeJogadores)
//		 * 		return idJogadorAtual+1;
//		 * 	else
//		 * 		return 0;
//		 * else
//		 * 	if(idJogadorAtual+1 >= 0)
//		 * 		return idJogadorAtual-1;
//		 * 	else
//		 * 		return numeroDeJogadores -1 ;
//		 * */
//	}

//	@Override
//	public Cor escolherCor() {
//		
//		Scanner scanner = new Scanner(System.in);
//		String Cor_Escolhida = scanner.next();
//		
//		switch(Cor_Escolhida){
//		case "AZUL":
//		scanner.close();
//		return Cor.AZUL;
//		
//		case "AMARELO":
//			scanner.close();
//			return Cor.AMARELO;
//		
//		case "VERMELHO":
//			scanner.close();
//			return Cor.VERMELHO;
//		
//		default:
//			scanner.close();
//			return Cor.VERDE;
//			
//		}
//		
//	}
	
//	@Override
//	public boolean ValidarMao(Carta TopoDescarte){
//		boolean Valida = false;
//		Carta CartaAtual;
//			for(int i = 0; i < mao.size(); i++){
//				CartaAtual = mao.get(i);
//				if(CartaAtual.getCor() == Cor.ESPECIAL || CartaAtual.getCor() == TopoDescarte.getCor() || CartaAtual.getNumero() == TopoDescarte.getNumero()){
//					//CartaAtual.setValid(true);
//					Valida = true;
//				}		
//			}
//		
//		return Valida;
//	}
	
	public boolean validarMao(Carta topoDescarte, Cor corAtual){
		boolean result = false;	
		for(Carta c : mao){
			if(c.getCor().equals(corAtual) || (c.getNumero() == topoDescarte.getNumero() && c.getNumero() != 0) || c.getCor().equals(Cor.ESPECIAL) || (c.getEfeito() != null && c.getEfeito().equals(topoDescarte.getEfeito()))){
				c.setValida(true);
				result = true;
			}		
		}
		return result;
	}	
	
//	@Override
//	public boolean ValidarCarta(Carta TopoDescarte, Carta Validar){
//		if(Validar.getCor() == Cor.ESPECIAL || Validar.getCor() == TopoDescarte.getCor() || Validar.getNumero() == TopoDescarte.getNumero()){
//			//Validar.setValid(true);
//			return true;}
//		else
//			return false;
//	}
	
//	@Override
//	public void Jogar(Stack<Carta> Descarte, Stack<Carta> Deck, Cor CorAtual){
//		Scanner scanner = new Scanner(System.in);
//		int CartaSelecionada;
//		if(ValidarMao(Descarte.peek())){
//			/*do{
//				CartaSelecionada = scanner.nextInt();
//				if(!mao.get(CartaSelecionada).getValid()){
//					System.out.println("Carta invalida, selecione outra.\n");
//				}
//			} while CartaSelecionada>= mao.size() || CartaSelecionada < 0 || !mao.get(CartaSelecionada).getValid();
//			
//			
//			Descarte.push(jogarCarta(CartaSelecionada));*/
//			
//			return;//Remover assim que os outros metodos estiverem prontos.
//		}else{
//			puxarCarta(Deck, 1);
//			if(ValidarCarta(Descarte.peek(), mao.get(mao.size() - 1))){
//				/*do{
//					CartaSelecionada = scanner.nextInt();
//					if(!mao.get(CartaSelecionada).getValid()){
//						System.out.println("Carta invalida, selecione outra.\n");
//					}
//				} while CartaSelecionada>= mao.size() || CartaSelecionada < 0 || !mao.get(CartaSelecionada).getValid();
//				
//				Descarte.push(jogarCarta(CartaSelecionada));*/
//
//			}else{return;}
//		}
//	}
	
	/* GET AND SET */
	
	
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getIdade() {
		return idade;
	}

	public void setIdade(int idade) {
		this.idade = idade;
	}

	public List<Carta> getMao() {
		return mao;
	}

	public void setMao(List<Carta> mao) {
		this.mao = mao;
	}

	public boolean isUno() {
		return uno;
	}

	public void setUno(boolean uno) {
		this.uno = uno;
	}

	
}